home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
ab20
/
ab20_archive
/
utilities
/
emulators
/
apple2emul.lzh
/
Samp.disk
/
T.MUSYS.s
< prev
Wrap
Text File
|
1991-04-18
|
37KB
|
1,936 lines
****************************
* *
* MUSYS: *
* A MULTIUSER/MULTITASKING *
* ELKSYSTEM *
* *
* (C) COPYRIGHT 1983 BY *
* RICHARD SKRENTA *
* ALL RIGHTS RESERVED *
* *
****************************
JOBNO EQU $00
PCOUNT EQU $01
JOBPTR EQU $02
INBUF EQU $04
OUTBUF EQU $06
PRSEBUF EQU $08
SYSMEM EQU $0A
JOBMEM EQU $0C
LOMEM EQU $0E
TEMP EQU $10
*
REGS EQU $45
X1 EQU $D0
X2 EQU $D2
X3 EQU $D4
X4 EQU $D6
X5 EQU $D8
X6 EQU $DA
X7 EQU $DC
X8 EQU $DE
PTR0 EQU $E0
PTR1 EQU $E2
PTR2 EQU $E4
PTR3 EQU $E6
PTR4 EQU $E8
T1 EQU $F0
T2 EQU $F2
T3 EQU $F4
T4 EQU $F6
T5 EQU $F8
T6 EQU $FA
T7 EQU $FC
T8 EQU $FE
*
JSTATUS EQU 0
JPRIORTY EQU 1
JPCOUNT EQU 2
JECHO EQU 3
JINDEV EQU 4
JOUTDEV EQU 5
JPROG EQU 6
JREGS EQU 8
JCCOUNT EQU 13
JCTRLC EQU 14
JINP1 EQU 16
JINP2 EQU 17
JOUTP1 EQU 18
JOUTP2 EQU 19
JPRSEP1 EQU 20
JPRSEP2 EQU 21
JNAME EQU 22
JUSERID EQU 30
JACCOUNT EQU 38
JPROMPT EQU 42
JPAUSE EQU 54
JSUSP EQU 55
JVAR EQU 56
JINTX EQU 105
JINTZ EQU 107
JCOLUMN EQU 109
JTIME EQU 110
JPRMPT EQU 116
JRUNSTAT EQU 128
*
HOME EQU $FC58
*
SYSRUN EQU $300
SUBJOB EQU SYSRUN+1
Q1 EQU SYSRUN+2
Q2 EQU SYSRUN+3
QS EQU SYSRUN+4
QM EQU SYSRUN+5
QH EQU SYSRUN+6
QD EQU SYSRUN+7
QMN EQU SYSRUN+8
QY EQU SYSRUN+9
K1 EQU SYSRUN+10
K2 EQU SYSRUN+11
MAXJOBS EQU SYSRUN+18
SUBPROG EQU SYSRUN+19
SYSLOG EQU SYSRUN+20
*
DEVICE EQU $900
DEVIN EQU DEVICE+3
DEVOUT EQU DEVICE+6
OPEN EQU DEVICE+9
CLOSE EQU DEVICE+12
EXEC EQU DEVICE+15
DEVSTAT EQU DEVICE+18
BUFP1 EQU DEVICE+82
BUFP2 EQU DEVICE+99
*
ORG $8000
MUSYS JMP INIT
JMP SETJOB
JMP CYCLE
JMP DOCYCLE
JMP PRTINC
JMP TIME
JMP IN
JMP OUT
JMP RESUME
JMP INTER
JMP PROMPT
JMP NAME
JMP READLN
JMP LEADIN
JMP DELIM
JMP PARNUM
JMP LISTCMD
JMP PARSE
JMP CMD
JMP PROGRAM
JMP SLEEP
JMP TAB
JMP PRINT
JMP PUSH
JMP RESET
JMP PULL
JMP DECPRT
JMP DEC
JMP ZERO
JMP TIMPRT
JMP CREATE
JMP ATTACH
JMP SYSIO
JMP EXEC0
JMP DAYPRT
JMP BEGIN
JMP KILL
*
COUT ORA #$80
JSR $FDED
RTS
*
SETJOB LDA JOBNO
ASL
ASL
ASL
CLC
ADC LOMEM+1
TAY
STY JOBPTR+1
INY
STY INBUF+1
INY
STY OUTBUF+1
INY
STY PRSEBUF+1
INY
STY SYSMEM+1
INY
STY JOBMEM+1
LDY #0
STY JOBPTR
STY INBUF
STY OUTBUF
STY PRSEBUF
STY SYSMEM
STY JOBMEM
RTS
*
CYCLE INC JOBNO
LDA JOBNO
CMP MAXJOBS
BNE CYCLE2
LDA #$FF
STA JOBNO
BNE CYCLE
CYCLE2 JSR SETJOB
RTS
*
DOCYCLE JSR CYCLE
LDY #JSTATUS
LDA (JOBPTR),Y
BEQ DOCYC2
LDY #JPAUSE
LDA (JOBPTR),Y
BEQ DOCYC4
JSR RESUME
BCS DOCYC2
LDY #JPCOUNT
LDA PCOUNT
STA (JOBPTR),Y
LDY #JPAUSE
LDA #0
STA (JOBPTR),Y
DOCYC4 LDY #JPCOUNT
LDA (JOBPTR),Y
CMP PCOUNT
BNE DOCYC2
DOCYC3 CLC
RTS
DOCYC2 SEC
RTS
*
PRTINC LDY #JPCOUNT
LDA (JOBPTR),Y
LDY #JPRIORTY
CLC
ADC (JOBPTR),Y
LDY #JPCOUNT
STA (JOBPTR),Y
RTS
*
TIME LDY #0
TIME3 LDA Q1,Y
CLC
ADC #1
STA Q1,Y
CMP K1,Y
BCS TIME2
RTS
TIME2 LDA #0
STA Q1,Y
INY
CPY #7
BNE TIME3
RTS
*
* IN ROUTINE CHECKS FOR INPUT
* DATA AT INPUT DEVICE OF CURRENT
* JOB AND PUSHES IT ONTO THE FIFO
* IF VALID
*
IN LDY #JINDEV
LDA (JOBPTR),Y
TAY
JSR DEVIN
BCS IN2
PHA
LDY #JINP1
LDA (JOBPTR),Y
TAY
PLA
STA (INBUF),Y
TYA
LDY #JINP2
CLC
ADC #1
CMP (JOBPTR),Y
BEQ IN2
LDY #JINP1
STA (JOBPTR),Y
IN2 RTS
*
* OUT ROUTINE CHECKS FOR DATA
* IN FIFO OUTPUT BUFFER AND
* SENDS IT TO OUTPUT DEVICE
*
OUT LDY #JOUTP2
LDA (JOBPTR),Y
LDY #JOUTP1
CMP (JOBPTR),Y
BEQ OUT2
LDY #JOUTP2
CLC
ADC #1
STA (JOBPTR),Y
LDY #JSUSP
LDA (JOBPTR),Y
BNE OUT2
LDY #JOUTP2
LDA (JOBPTR),Y
TAY
DEY
LDA (OUTBUF),Y
PHA
LDY #JOUTDEV
LDA (JOBPTR),Y
TAY
PLA
JSR DEVOUT
BCC OUT2
LDY #JOUTP2
LDA (JOBPTR),Y
SEC
SBC #1
STA (JOBPTR),Y
OUT2 RTS
*
RESUME LDY #JINDEV
LDA (JOBPTR),Y
TAY
JSR DEVIN
BCS RESUME2
CMP #17
BEQ RESUME3
CMP #3
BEQ RESUME4
SEC
RESUME2 RTS
RESUME3 CLC
RTS
RESUME4 JSR INTC
SEC
RTS
*
INTER LDY #JINP1
LDA (JOBPTR),Y
LDY #JINP2
CMP (JOBPTR),Y
BEQ INTER3
TAY
DEY
LDA (INBUF),Y
LDY #7
INTER1 CMP INTTBL-1,Y
BEQ INTER2
DEY
BNE INTER1
RTS
INTER2 DEY
TYA
ASL
TAY
LDA INTJMP,Y
STA PTR1
INY
LDA INTJMP,Y
STA PTR1+1
JMP (PTR1)
INTTBL DFB 3,20,15
DFB 19,17,24
DFB 26,0
INTJMP DFB #<INTC,#>INTC
DFB #<INTT,#>INTT
DFB #<INTO,#>INTO
DFB #<INTS,#>INTS
DFB #<INTQ,#>INTQ
DFB #<INTX,#>INTX
DFB #<INTZ,#>INTZ
INTER3 RTS
INTC LDY #JCCOUNT
LDA (JOBPTR),Y
CLC
ADC #1
STA (JOBPTR),Y
CMP #2
BCS INTC2
JSR PULL
RTS
INTC2 LDA #0
STA (JOBPTR),Y
LDY #JCTRLC
LDA (JOBPTR),Y
PHA
INY
LDA (JOBPTR),Y
BNE INTC3
PLA
JSR PULL
JSR PRINT
ASC '?NO CTRL-C VECTOR'
DFB $8D,0
RTS
INTC3 LDY #JPROG+1
STA (JOBPTR),Y
DEY
PLA
STA (JOBPTR),Y
JSR RESET
LDA #0
LDY #JSUSP
STA (JOBPTR),Y
LDY #JPAUSE
STA (JOBPTR),Y
LDY #JCTRLC
LDA (JOBPTR),Y
PHA
INY
LDA (JOBPTR),Y
LDY #JPROG+1
STA (JOBPTR),Y
DEY
PLA
STA (JOBPTR),Y
LDY #JPCOUNT
LDA PCOUNT
CLC
ADC #1
STA (JOBPTR),Y
JSR PRINT
ASC '^C'
DFB $8D,0
RTS
INTO JSR PULL
LDY #JSUSP
LDA (JOBPTR),Y
EOR #1
STA (JOBPTR),Y
LDA #0
LDY #JOUTP1
STA (JOBPTR),Y
LDY #JOUTP2
STA (JOBPTR),Y
RTS
INTT JSR PULL
JSR PRINT
DFB 91,0
LDA #<QD
LDY #>QD
JSR DAYPRT
LDA #<QS
LDY #>QS
JSR TIMPRT
JSR PRINT
ASC ' JOB '
DFB 0
LDA #0
STA T1+1
LDA JOBNO
STA T1
JSR DECPRT
JSR PRINT
ASC ' ON DEV ('
DFB 0
LDY #JINDEV
LDA (JOBPTR),Y
STA T1
JSR DECPRT
LDA #'/'
JSR PUSH
LDY #JOUTDEV
LDA (JOBPTR),Y
STA T1
JSR DECPRT
JSR PRINT
ASC ') S'
DFB 0
LDY #JSTATUS
LDA (JOBPTR),Y
STA T1
JSR DECPRT
JSR PRINT
ASC ' P'
DFB 0
LDY #JPRIORTY
LDA (JOBPTR),Y
STA T1
JSR DECPRT
JSR PRINT
ASC ' R'
DFB 0
LDY #JRUNSTAT
LDA (JOBPTR),Y
STA T1
JSR DECPRT
JSR PRINT
ASC ' ; RUNNING IN '
DFB 0
LDY #JNAME
STY T1
INTT3 LDY T1
LDA (JOBPTR),Y
BEQ INTT2
JSR PUSH
INC T1
JMP INTT3
INTT2 JSR PRINT
ASC ' AT '
DFB 0
LDY #JPROG
LDA (JOBPTR),Y
STA T1
INY
LDA (JOBPTR),Y
STA T1+1
JSR DECPRT
LDA #93
JSR PUSH
LDA #13
JSR PUSH
RTS
INTS JSR PULL
LDY #JPAUSE
LDA #1
STA (JOBPTR),Y
RTS
INTQ JSR PULL
LDY #JPAUSE
LDA #0
STA (JOBPTR),Y
RTS
INTX LDY #JINTX
LDA (JOBPTR),Y
PHA
INY
LDA (JOBPTR),Y
BNE INTX2
PLA
RTS
INTX2 LDY #JPROG+1
STA (JOBPTR),Y
DEY
PLA
STA (JOBPTR),Y
JSR PULL
RTS
INTZ LDY #JINTZ
LDA (JOBPTR),Y
PHA
INY
LDA (JOBPTR),Y
BNE INTZ2
PLA
RTS
INTZ2 LDY #JPROG+1
STA (JOBPTR),Y
DEY
PLA
STA (JOBPTR),Y
JSR PULL
RTS
*
PROMPT PLA
STA PTR1
PLA
STA PTR1+1
LDX #0
LDY #JPROMPT
PROMPT3 INC PTR1
BNE PROMPT2
INC PTR1+1
PROMPT2 LDA (PTR1,X)
STA (JOBPTR),Y
INY
CMP #0
BNE PROMPT3
LDA PTR1+1
PHA
LDA PTR1
PHA
RTS
*
NAME PLA
STA PTR1
PLA
STA PTR1+1
LDX #0
LDY #JNAME
NAME3 INC PTR1
BNE NAME2
INC PTR1+1
NAME2 LDA (PTR1,X)
STA (JOBPTR),Y
INY
CMP #0
BNE NAME3
LDA PTR1+1
PHA
LDA PTR1
PHA
RTS
*
READLN LDA #0
LDY #JPRSEP1
STA (JOBPTR),Y
LDY #JPRSEP2
STA (JOBPTR),Y
LDY #JSUSP
STA (JOBPTR),Y
READLN0 LDY #JPROMPT
STY T1
READ3 LDY T1
LDA (JOBPTR),Y
BEQ READ10
INY
STY T1
JSR PUSH
JMP READ3
READ10 LDY #0
STY T2
LDY #JPRSEP1
LDA (JOBPTR),Y
STA T1
READ11 LDY T2
CPY T1
BEQ READ2
LDA (PRSEBUF),Y
JSR PUSH
INC T2
JMP READ11
READ2 JSR SLEEP
LDY #JCCOUNT
LDA (JOBPTR),Y
BEQ READ8
JMP READC
READ8 JSR PULL
BCS READ2
PHA
LDY #JSUSP
LDA #0
STA (JOBPTR),Y
PLA
LDY #8
READ5 CMP READTBL-1,Y
BEQ READ4
DEY
BNE READ5
READ7 PHA
LDY #JPRSEP1
LDA (JOBPTR),Y
CLC
ADC #5
LDY #JPRSEP2
CMP (JOBPTR),Y
BEQ READ9
LDY #JPRSEP1
LDA (JOBPTR),Y
CLC
ADC #1
STA (JOBPTR),Y
TAY
DEY
PLA
STA (PRSEBUF),Y
PHA
LDY #JECHO
LDA (JOBPTR),Y
BEQ READ12
PLA
JMP READ2
READ12 PLA
CMP #32
BCS READ6
PHA
LDA #'^'
JSR PUSH
PLA
ORA #%01000000
READ6 JSR PUSH
JMP READ2
READ9 PLA
LDA #7
JSR PUSH
JMP READ2
READ4 DEY
TYA
ASL
TAY
LDA RDTBL,Y
STA PTR1
INY
LDA RDTBL,Y
STA PTR1+1
JMP (PTR1)
READM LDA #13
JSR PUSH
RTS
READC LDY #JOUTP1
LDA (JOBPTR),Y
LDY #JOUTP2
CMP (JOBPTR),Y
BEQ READC2
JMP READ2
READC2 JSR RESET
JSR PRINT
ASC '^C'
DFB $8D,0
LDY #JCCOUNT
LDA #0
STA (JOBPTR),Y
LDY #JCTRLC
LDA (JOBPTR),Y
STA PTR1
INY
LDA (JOBPTR),Y
STA PTR1+1
JMP (PTR1)
READH LDY #JPRSEP1
LDA (JOBPTR),Y
BNE READH2
LDA #13
JSR PUSH
JMP READLN
READH2 SEC
SBC #1
STA (JOBPTR),Y
TAY
LDA (PRSEBUF),Y
CMP #32
BCS READH3
LDA #8
JSR PUSH
READH3 JSR PRINT
DFB 8,32,8,0
JMP READ2
READE LDA #'$'
JMP READ7
READL LDA #12
JSR PUSH
JMP READLN0
READU LDA #' '
JMP READ7
READR LDA #13
JSR PUSH
JMP READLN0
READTBL DFB 13,3,8
DFB 27,127,12
DFB 21,18
*
* M,C,H,ESC,<DELETE>
*
RDTBL DFB #<READM,#>READM
DFB #<READC,#>READC
DFB #<READH,#>READH
DFB #<READE,#>READE
DFB #<READH,#>READH
DFB #<READL,#>READL
DFB #<READU,#>READU
DFB #<READR,#>READR
*
LEADIN LDY #JPRSEP1
LDA (JOBPTR),Y
STA T1
LDY #JPRSEP2
LDA (JOBPTR),Y
TAY
LEADIN3 LDA (PRSEBUF),Y
CPY T1
BEQ LEADIN2
JSR DELIM
BCS LEADIN2
INY
JMP LEADIN3
LEADIN2 TYA
LDY #JPRSEP2
STA (JOBPTR),Y
RTS
*
DELIM LDX #0
STA T7
DELIM4 LDA DELTBL,X
BEQ DELIM2
CMP T7
BEQ DELIM3
INX
JMP DELIM4
DELIM2 SEC
LDA T7
RTS
DELIM3 CLC
LDA T7
RTS
DELTBL ASC ' "(),./: ;=<>'
DFB 0
*
PARNUM JSR LEADIN
LDY #JPRSEP2
LDA (JOBPTR),Y
STA T1
LDY #JPRSEP1
LDA (JOBPTR),Y
STA T2
LDA #0
STA T5
STA T3
STA T3+1
LDA T1
CMP T2
BNE PARNUM3
SEC
RTS
PARNUM3 LDY T1
CPY T2
BEQ PARNUM2
LDA (PRSEBUF),Y
JSR DELIM
BCC PARNUM2
CMP #'?'
BNE PARNUM5
JSR PRINT
ASC '(NUMERICAL ARGUMENT EXPECTED)'
DFB $8D,0
RTS
PARNUM5 CMP #'0'
BCC PARNUM2
CMP #':'
BCS PARNUM2
SEC
SBC #'0'
PHA
LDA T3
STA T4
LDA T3+1
STA T4+1
ASL T3
ROL T3+1
ASL T3
ROL T3+1
ASL T3
ROL T3+1
ASL T4
ROL T4+1
LDA T3
CLC
ADC T4
STA T3
LDA T3+1
ADC T4+1
STA T3+1
PLA
CLC
ADC T3
STA T3
LDA #0
ADC T3+1
STA T3+1
LDA #1
STA T5
INC T1
JMP PARNUM3
PARNUM2 LDY #JPRSEP2
LDA T1
STA (JOBPTR),Y
LDA T5
BNE PARNUM4
SEC
RTS
PARNUM4 CLC
RTS
*
LISTCMD JSR PRINT
ASC 'OPTION, ONE OF THE FOLLOWING:'
DFB $8D,$8D,0
LDA #0
STA T2
LDX #0
LISTCMD3 LDA (PTR3,X)
BEQ LISTCMD2
JSR PUSH
INC PTR3
BNE LISTCMD5
INC PTR3+1
LISTCMD5 JMP LISTCMD3
LISTCMD2 JSR SLEEP
INC T2
LDA T2
CMP #3
BNE LISTCMD6
LDA #0
STA T2
LDA #13
JSR PUSH
JMP LISTCMD7
LISTCMD6 TAY
LDA LISTTAB,Y
JSR TAB
LISTCMD7 LDA (PTR3,X)
BNE LISTCMD3
INC PTR3
BNE LISTCMD4
INC PTR3+1
LISTCMD4 LDA (PTR3,X)
BNE LISTCMD3
LDA #13
JSR PUSH
LDA T2
BEQ LISTCMD8
LDA #13
JSR PUSH
LISTCMD8 SEC
RTS
LISTTAB DFB 0,13,26
*
PARSE JSR LEADIN
LDY #JPRSEP1
LDA (JOBPTR),Y
LDY #JPRSEP2
CMP (JOBPTR),Y
BNE PARSE0
CLC
RTS
PARSE0 LDX #0
STX T1
STX T2
LDA PTR3
STA PTR4
LDA PTR3+1
STA PTR4+1
PARSE3 LDY #JPRSEP2
LDA (JOBPTR),Y
STA T3
LDY #JPRSEP1
LDA (JOBPTR),Y
STA T4
PARSE5 LDY T3
LDA (PRSEBUF),Y
JSR SLEEP
CPY T4
BEQ PARSE1
CMP #'!'
BEQ PARSE19
CMP #'?'
BNE PARSE14
JMP LISTCMD
PARSE14 JSR DELIM
LDX #0
BCC PARSE1
STA T5
LDA (PTR4,X)
BEQ PARSE2
CMP T5
BNE PARSE2
INC T3
INC PTR4
BNE PARSE4
INC PTR4+1
PARSE4 JMP PARSE5
PARSE1 INC T1
LDA T2
STA T6
LDA T3
STA T8
LDA (PTR4,X)
BEQ PARSE11
PARSE2 INC T2
PARSE8 LDA (PTR4,X)
BEQ PARSE6
INC PTR4
BNE PARSE7
INC PTR4+1
PARSE7 JMP PARSE8
PARSE6 INC PTR4
BNE PARSE9
INC PTR4+1
PARSE9 LDA (PTR4,X)
BEQ PARSE12
JMP PARSE3
PARSE12 LDA T1
BNE PARSE10
JSR PRINT
ASC '?UNRECOGNIZED COMMAND-KEYWORD NOT FOUND'
DFB $8D,0
SEC
PARSE19 RTS
PARSE10 CMP #2
BCC PARSE11
JSR PRINT
ASC '?UNRECOGINIZED COMMAND-AMBIGUOUS'
DFB $8D,0
SEC
RTS
PARSE11 LDA T6
ASL
ASL
TAY
LDA (PTR2),Y
STA PTR1
INY
LDA (PTR2),Y
STA PTR1+1
INY
LDA (PTR2),Y
LDY #JSTATUS
CMP (JOBPTR),Y
BCC PARSE18
JMP PARSE13
PARSE18 CMP #50
BCC PARSE15
JSR PRINT
ASC '?LOGIN PLEASE'
DFB $8D,0
SEC
RTS
PARSE15 CMP #10
BCC PARSE16
JSR PRINT
ASC '?PRIVILEGED STATUS REQUIRED'
DFB $8D,0
SEC
RTS
PARSE16 CMP #1
BEQ PARSE17
JSR PRINT
ASC '?WHEEL OR OPERATOR CAPABILITY REQUIRED'
DFB $8D,0
SEC
RTS
PARSE17 JSR PRINT
ASC '?OPERATOR CAPABILITY REQUIRED'
DFB $8D,0
SEC
RTS
PARSE13 LDY #JPRSEP2
LDA T8
STA (JOBPTR),Y
JMP (PTR1)
*
CMD PLA
STA PTR1
PLA
STA PTR1+1
LDY #1
LDA (PTR1),Y
STA PTR3
INY
LDA (PTR1),Y
STA PTR3+1
INY
LDA (PTR1),Y
STA PTR2
INY
LDA (PTR1),Y
STA PTR2+1
TYA
CLC
ADC PTR1
STA PTR1
LDA #0
ADC PTR1+1
PHA
LDA PTR1
PHA
RTS
*
PROGRAM LDX #0
LDY #JREGS
PROG2 LDA (JOBPTR),Y
STA REGS,X
INY
INX
CPX #5
BNE PROG2
LDX #0
LDY #JVAR
PROG4 LDA (JOBPTR),Y
STA X1,X
INY
INX
CPX #$30
BNE PROG4
LDY #JPROG
LDA (JOBPTR),Y
STA TEMP
INY
LDA (JOBPTR),Y
STA TEMP+1
LDY #0
PROG3 LDA (SYSMEM),Y
STA $100,Y
DEY
BNE PROG3
LDY $47
LDX $49
TXS
LDX $46
LDA $48
PHA
LDA $45
PLP
JMP (TEMP)
*
SLEEP STA REGS
PLA
STA TEMP
PLA
STA TEMP+1
LDA REGS
STA $45
STX $46
STY $47
PHP
PLA
STA $48
TSX
STX $49
INC TEMP
BNE SLEEP4
INC TEMP+1
SLEEP4 LDY #JPROG
LDA TEMP
STA (JOBPTR),Y
INY
LDA TEMP+1
STA (JOBPTR),Y
LDX #0
LDY #JREGS
SLEEP3 LDA REGS,X
STA (JOBPTR),Y
INY
INX
CPX #5
BNE SLEEP3
LDX #0
LDY #JVAR
SLEEP5 LDA X1,X
STA (JOBPTR),Y
INY
INX
CPX #$30
BNE SLEEP5
LDY #0
SLEEP2 LDA $100,Y
STA (SYSMEM),Y
DEY
BNE SLEEP2
PLA
PLA
JMP LOOP3
*
TAB STA T1
LDY #JCOLUMN
LDA (JOBPTR),Y
CMP T1
BCS TAB3
LDA T1
SEC
SBC (JOBPTR),Y
STA T1
INC T1
TAB2 LDA #' '
JSR PUSH
DEC T1
BNE TAB2
TAB3 RTS
*
PRINT PLA
STA PTR0
PLA
STA PTR0+1
PRINT1 INC PTR0
BNE PRINT2
INC PTR0+1
PRINT2 LDY #0
LDA (PTR0),Y
CMP #0
BEQ PRINT3
JSR PUSH
JMP PRINT1
PRINT3 LDA PTR0+1
PHA
LDA PTR0
PHA
RTS
*
PUSH AND #$7F
CMP #10
BEQ PUSH6
PUSH0 PHA
LDY #JCOLUMN
CMP #13
BNE PUSH3
LDA #0
STA (JOBPTR),Y
JMP PUSH1
PUSH3 LDA (JOBPTR),Y
CLC
ADC #1
STA (JOBPTR),Y
PUSH1 LDY #JOUTP1
LDA (JOBPTR),Y
LDY #JOUTP2
CLC
ADC #1
CMP (JOBPTR),Y
BNE PUSH2
LDA SUBJOB
CMP SUBPROG
BNE PUSH5
JSR SLEEP
JMP PUSH1
PUSH5 PLA
RTS
PUSH2 LDY #JOUTP1
STA (JOBPTR),Y
TAY
DEY
PLA
STA (OUTBUF),Y
CMP #13
BNE PUSH6
LDA #10
JMP PUSH0
PUSH6 RTS
*
RESET LDA #0
LDY #JINP1
STA (JOBPTR),Y
LDY #JINP2
STA (JOBPTR),Y
LDY #JOUTP1
STA (JOBPTR),Y
LDY #JOUTP2
STA (JOBPTR),Y
RTS
*
PULL LDY #JINP2
LDA (JOBPTR),Y
LDY #JINP1
CMP (JOBPTR),Y
BEQ PULL2
LDY #JINP2
CLC
ADC #1
STA (JOBPTR),Y
TAY
DEY
LDA (INBUF),Y
CLC
RTS
PULL2 SEC
RTS
*
DECPRT JSR DEC
LDX #$FF
DECPRT3 INX
CPX #4
BEQ DECPRT2
LDA DECOUT,X
CMP #'0'
BEQ DECPRT3
DECPRT2 LDA DECOUT,X
JSR PUSH
INX
CPX #5
BNE DECPRT2
RTS
*
DEC LDA #5
STA T2
LDA #<DECOUT
STA PTR1
LDA #>DECOUT
STA PTR1+1
LDY #0
DEC1 LDA #'0'
STA T3
DEC2 LDA T1
SEC
SBC DECTBL,Y
TAX
LDA T1+1
SBC DECTBL+1,Y
BCC DEC3
STA T1+1
STX T1
INC T3
BNE DEC2
DEC3 LDX #0
LDA T3
STA (PTR1,X)
INC PTR1
BNE DEC4
INC PTR1+1
DEC4 INY
INY
DEC T2
BNE DEC1
RTS
DECTBL DFB #<10000,#>10000
DFB #<1000,#>1000
DFB #<100,#>100
DFB #<10,#>10
DFB #<1,#>1
DECOUT DS 5
*
ZERO LDY #0
TYA
ZERO2 STA (JOBPTR),Y
DEY
BNE ZERO2
RTS
*
TIMPRT STA PTR2
STY PTR2+1
LDA #' '
JSR PUSH
LDA #2
STA T5
LDA #0
STA T1+1
TIMPRT4 LDY T5
LDA (PTR2),Y
STA T1
JSR DEC
LDX #3
TIMPRT2 LDA DECOUT,X
JSR PUSH
INX
CPX #5
BNE TIMPRT2
LDA T5
BNE TIMPRT3
LDA #' '
JSR PUSH
RTS
TIMPRT3 LDA #':'
JSR PUSH
DEC T5
JMP TIMPRT4
*
DAYPRT STA PTR2
STY PTR2+1
LDA #' '
JSR PUSH
LDA #0
STA T1+1
LDY #0
LDA (PTR2),Y
STA T1
JSR DECPRT
LDA #'-'
JSR PUSH
LDY #1
LDA (PTR2),Y
ASL
CLC
ADC (PTR2),Y
STA T1
LDX #3
DAYPRT2 LDY T1
LDA MNTHTBL,Y
JSR PUSH
INC T1
DEX
BNE DAYPRT2
LDA #'-'
JSR PUSH
LDY #2
LDA (PTR2),Y
STA T1
JSR DECPRT
LDA #' '
JSR PUSH
RTS
MNTHTBL ASC '***JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'
*
* MAIN CONTROL SECTION
*
INIT LDY #0
INIT6 LDA LOADTXT,Y
BEQ INIT7
JSR COUT
INY
JMP INIT6
LOADTXT DFB $8D,$84
ASC 'BLOAD MUOBJ'
DFB $8D,0
*
TIMEK DFB 33,60
DFB 60,60,24
DFB 31,13,100
*
INIT7 JSR DEVICE
LDA #$4C
STA $3F8
LDA #<LOOP
STA $3F9
LDA #>LOOP
STA $3FA
*
LDA #$69
STA $3F2
LDA #$FF
STA $3F3
EOR #$A5
STA $3F4
*
LDA #0
STA PCOUNT
*
LDY #$C0
LDA #0
INIT3 STA SYSRUN,Y
DEY
BNE INIT3
STA SYSRUN
*
LDY #0
INIT8 LDA TIMEK,Y
STA K1,Y
INY
CPY #8
BNE INIT8
*
LDY #0
INIT5 LDA MUSYS,Y
STA $800,Y
DEY
BNE INIT5
*
LDA #8
STA MAXJOBS
*
LDA #<LOGTBL
STA SYSLOG
LDA #>LOGTBL
STA SYSLOG+1
*
LDA #$FF
STA JOBNO
JSR CYCLE
INIT2 JSR ZERO
JSR CYCLE
LDA JOBNO
BNE INIT2
*
LDY #JSTATUS
LDA #1
STA (JOBPTR),Y
LDY #JPRIORTY
LDA #10
STA (JOBPTR),Y
LDY #JPROG
LDA #<SYSIO
STA (JOBPTR),Y
INY
LDA #>SYSIO
STA (JOBPTR),Y
LDY #JPCOUNT
LDA #1
STA (JOBPTR),Y
*
* SYSTEM SUPERVISORY ROUTINE
*
LOOP LDA #0
STA SUBJOB
INC PCOUNT
LDA #$FF
STA JOBNO
JSR CYCLE
LOOP1 LDY SUBJOB
LDA SUBTBL,Y
STA LOOPX+1
INY
LDA SUBTBL,Y
BEQ LOOP
STA LOOPX+2
INY
STY SUBJOB
LOOP2 JSR TIME
JSR DOCYCLE
BCS LOOP3
LOOPX JSR $0000
LOOP3 LDA JOBNO
BNE LOOP2
BEQ LOOP1
SUBTBL DFB #<IN,#>IN
DFB #<INTER,#>INTER
DFB #<OUT,#>OUT
DFB #<OUT,#>OUT
DFB #<OUT,#>OUT
DFB #<PROGRAM,#>PROGRAM
DFB #<IN,#>IN
DFB #<INTER,#>INTER
DFB #<OUT,#>OUT
DFB #<OUT,#>OUT
DFB #<OUT,#>OUT
DFB #<PRTINC,#>PRTINC
DFB 0,0
*
CREATE PHA
LDA JOBNO
STA T6
LDA JOBPTR
STA PTR1
LDA JOBPTR+1
STA PTR1+1
LDA #0
STA JOBNO
CREATE3 JSR CYCLE
LDY #JSTATUS
LDA (JOBPTR),Y
BEQ CREATE2
LDA JOBNO
BNE CREATE3
LDA T6
STA JOBNO
JSR SETJOB
PLA
SEC
RTS
CREATE2 JSR ZERO
LDY #JSTATUS
LDA (PTR1),Y
STA (JOBPTR),Y
INY
LDA (PTR1),Y
STA (JOBPTR),Y
LDY #JPCOUNT
LDA PCOUNT
CLC
ADC #1
STA (JOBPTR),Y
LDY #JPROG
LDA #<BEGIN
STA (JOBPTR),Y
INY
LDA #>BEGIN
STA (JOBPTR),Y
LDY #JUSERID
CREATE4 LDA (PTR1),Y
STA (JOBPTR),Y
INY
CPY #JPROMPT
BNE CREATE4
LDY #JTIME
LDX #0
CREATE5 LDA QS,X
STA (JOBPTR),Y
INY
INX
CPX #6
BNE CREATE5
LDY #JRUNSTAT
PLA
STA (JOBPTR),Y
LDA JOBNO
PHA
LDA T6
STA JOBNO
JSR SETJOB
PLA
CLC
RTS
*
ATTACH STX T1
STY T2
STA T5
LDA JOBNO
STA T6
LDA T5
STA JOBNO
JSR SETJOB
LDY #JINDEV
LDA T1
STA (JOBPTR),Y
LDY #JOUTDEV
LDA T2
STA (JOBPTR),Y
LDA T6
STA JOBNO
JSR SETJOB
LDA T5
LDY T1
STA DEVSTAT,Y
LDY T2
STA DEVSTAT,Y
RTS
*
KILL PHA
LDA JOBNO
STA T6
PLA
STA JOBNO
JSR SETJOB
LDY #JINDEV
LDA (JOBPTR),Y
LDY #JOUTDEV
CMP (JOBPTR),Y
BEQ KILL3
TAY
JSR CLOSE
KILL3 LDY #JINDEV
LDA #0
STA (JOBPTR),Y
LDY #JPROG
LDA #<DIE
STA (JOBPTR),Y
INY
LDA #>DIE
STA (JOBPTR),Y
JSR RESET
LDY #JRUNSTAT
LDA #%00010000
STA (JOBPTR),Y
LDX #0
LDY #JTIME
KILL2 LDA QS,X
STA (JOBPTR),Y
INY
INX
CPX #6
BNE KILL2
JSR PRINT
DFB $8D
ASC 'KILLED JOB '
DFB 0
LDA #0
STA T1+1
LDA JOBNO
STA T1
JSR DECPRT
LDY #JUSERID
LDA (JOBPTR),Y
CMP #'*'
BEQ KILL6
JSR PRINT
ASC ' ,USER '
DFB 0
LDY #JUSERID
STY T1
KILL4 LDY T1
LDA (JOBPTR),Y
BEQ KILL5
JSR PUSH
INC T1
LDA T1
CMP #JACCOUNT
BNE KILL4
KILL5 LDA #','
JSR PUSH
KILL6 JSR PRINT
ASC ' AT '
DFB 0
LDA #<QD
LDY #>QD
JSR DAYPRT
LDA #<QS
LDY #>QS
JSR TIMPRT
LDA #13
JSR PUSH
LDA T6
STA JOBNO
JSR SETJOB
RTS
*
SYSID ASC 'SYSJOB'
DFB 0,0
ASC '****'
SYSNEW ASC '****'
DFB 0,0,0,0
ASC '****'
*
SYSOPR ASC 'OPER'
DFB 0
LOGTBL DFB 1,3,0,0,0,0,0,0,0
*
SYSIO JSR NAME
ASC 'SYSIO'
DFB 0
LDY #JUSERID
LDX #0
SYSIO2 LDA SYSID,X
STA (JOBPTR),Y
INX
INY
CPY #JPROMPT
BNE SYSIO2
LDA SUBJOB
STA SUBPROG
LDA JOBNO
STA T8
LDA #%10000000
JSR CREATE
STA JOBNO
JSR SETJOB
LDY #JPROG
LDA #<JOBCTL
STA (JOBPTR),Y
INY
LDA #>JOBCTL
STA (JOBPTR),Y
LDA T8
STA JOBNO
JSR SETJOB
LDA #%10000000
JSR CREATE
STA JOBNO
JSR SETJOB
LDY #JPROG
LDA #<OPRCHK
STA (JOBPTR),Y
LDA #>OPRCHK
INY
STA (JOBPTR),Y
LDA T8
STA JOBNO
JSR SETJOB
LDA #%10000000
JSR CREATE
STA JOBNO
JSR SETJOB
LDY #JUSERID
LDX #0
SYSIO7 LDA SYSOPR,X
STA (JOBPTR),Y
BEQ SYSIO8
INX
INY
JMP SYSIO7
SYSIO8 LDA T8
STA JOBNO
JSR SETJOB
SYSIO3 LDA #0
STA T8
SYSIO4 JSR SLEEP
LDY T8
INC T8
LDA LOGTBL,Y
BEQ SYSIO3
TAY
LDA DEVSTAT,Y
BNE SYSIO4
JSR DEVIN
BCS SYSIO4
CMP #3
BEQ SYSIO6
CMP #13
BNE SYSIO4
SYSIO6 LDA #%00100000
JSR CREATE
BCS SYSIO4
STA T7
LDY T8
DEY
LDA LOGTBL,Y
TAY
TAX
LDA T7
JSR ATTACH
LDA JOBNO
STA T6
LDA T7
STA JOBNO
JSR SETJOB
LDY #JUSERID
LDX #0
SYSIO5 LDA SYSNEW,X
STA (JOBPTR),Y
INY
INX
CPY #JPROMPT
BNE SYSIO5
LDY #JSTATUS
LDA #60
STA (JOBPTR),Y
INY
LDA #2
STA (JOBPTR),Y
LDA T6
STA JOBNO
JSR SETJOB
JMP SYSIO4
*
JOBCTL JSR NAME
ASC 'JOBCTL'
DFB 0
JOBCTL2 LDA MAXJOBS
STA T8
JOBCTL3 JSR SLEEP
LDA JOBNO
STA T7
LDA #2
STA JOBNO
JSR SETJOB
LDY #JSTATUS
LDA #1
STA (JOBPTR),Y
LDY #JRUNSTAT
LDA #%10000000
STA (JOBPTR),Y
LDA T7
STA JOBNO
JSR SETJOB
LDA T8
STA JOBNO
JSR SETJOB
LDA JOBPTR
STA PTR2
LDA JOBPTR+1
STA PTR2+1
LDA T7
STA JOBNO
JSR SETJOB
LDY #JRUNSTAT
LDA (PTR2),Y
AND #%10000000
BEQ JOBCTL4
JMP JOBCTL7
JOBCTL4 LDA (PTR2),Y
AND #%01000000
BEQ JOBCTL5
JMP JOBBCH
JOBCTL5 LDA (PTR2),Y
AND #%00100000
BEQ JOBCTL6
JMP JOBNLI
JOBCTL6 LDA (PTR2),Y
AND #%00010000
BEQ JOBCTL7
JMP JOBOUT
JOBCTL7 DEC T8
BNE JOBCTL3
BEQ JOBCTL2
JOBBCH LDY #JOUTP1
LDA (PTR2),Y
LDY #JOUTP2
CMP (PTR2),Y
BEQ JOBBCH2
JMP JOBCTL7
JOBBCH2 LDY #JINP1
LDA (PTR2),Y
LDY #JINP2
CMP (PTR2),Y
BEQ JOBBCH4
JMP JOBCTL7
JOBBCH4 LDA T8
JSR KILL
JMP JOBCTL7
JOBNLI LDA QM
LDY #JTIME+1
SEC
SBC (PTR2),Y
CMP #2
BCS JOBNLI2
JMP JOBCTL7
JOBNLI2 LDA T8
JSR KILL
JMP JOBCTL7
JOBOUT LDY #JOUTP1
LDA (PTR2),Y
LDY #JOUTP2
CMP (PTR2),Y
BNE JOBOUT2
JOBOUT3 LDY #JSTATUS
LDA #0
STA (PTR2),Y
LDY #JOUTDEV
LDA (PTR2),Y
TAY
JSR CLOSE
JMP JOBCTL7
JOBOUT2 LDA QM
LDY #JTIME+1
SEC
SBC (PTR2),Y
CMP #1
BCS JOBOUT3
JMP JOBCTL7
*
EXEC0 JMP EXEC
*
BEGIN JSR PRINT
DFB $8D
ASC 'JOB '
DFB 0
JSR SLEEP
LDA JOBNO
STA T1
LDA #0
STA T1+1
JSR DECPRT
JSR PRINT
ASC ' ON MUSYS PROCESSOR V1(6502)'
DFB $8D,0
JSR SLEEP
LDY #JPRMPT
LDA #'@'
STA (JOBPTR),Y
INY
LDA #0
STA (JOBPTR),Y
JSR SLEEP
JMP EXEC0
DIE JSR SLEEP
JMP DIE
OPRCHK JSR NAME
ASC 'OPRCHK'
DFB 0
LDA JOBNO
STA T8
OPRCHK3 JSR SLEEP
LDA #0
STA JOBNO
OPRCHK2 JSR SETJOB
LDY #JSTATUS
LDA #1
STA (JOBPTR),Y
INY
LDA #10
STA (JOBPTR),Y
LDY #JRUNSTAT
LDA #%10000000
STA (JOBPTR),Y
INC JOBNO
LDA JOBNO
CMP #4
BNE OPRCHK2
DEC JOBNO
JSR SETJOB
LDY #JPRIORTY
LDA #1
STA (JOBPTR),Y
LDA T8
STA JOBNO
JSR SETJOB
LDA $C000
CMP #$1E
BEQ OPRCHK7
CMP #$9E
BNE OPRCHK3
OPRCHK7 LDA MAXJOBS
STA JOBNO
OPRCHK6 JSR SETJOB
LDY #JINDEV
LDA (JOBPTR),Y
CMP #1
BNE OPRCHK4
LDA #0
STA (JOBPTR),Y
OPRCHK4 LDY #JOUTDEV
LDA (JOBPTR),Y
CMP #1
BNE OPRCHK5
LDA #0
STA (JOBPTR),Y
OPRCHK5 DEC JOBNO
BNE OPRCHK6
LDA #3
STA JOBNO
JSR SETJOB
LDA #1
LDY #JINDEV
STA (JOBPTR),Y
LDY #JOUTDEV
STA (JOBPTR),Y
LDA T8
STA JOBNO
JSR SETJOB
JMP OPRCHK